#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>

int main() {
    int fd;
    char buffer[1024] = {0};
    const char* fifo_path = "/tmp/myfifo";

    // 创建命名管道（若不存在）
    if (mkfifo(fifo_path, 0755) == -1) {
        if (errno != EEXIST) {  // 忽略已存在的错误
            perror("mkfifo");
            return 1;
        }
    }

    fd = open(fifo_path, O_RDONLY);  // 以读模式打开
    if (fd == -1) {
        perror("open");
        return 1;
    }

    ssize_t bytes_read = 0;
    while(1){
       memset(buffer, 0, sizeof(buffer));
       bytes_read = read(fd, buffer, sizeof(buffer));
       printf("bytes_read = [%ld], buffer = [%s]\n", bytes_read, buffer);
       
       if(!strncmp(buffer, "exit", 4)){
           break;
       }
    }
    close(fd);
        
    printf("read_fifo:删除管道文件\n");
    unlink(fifo_path);  // 删除命名管道文件
    return 0;
}
